package com.hdu.point_offer;


import java.util.ArrayList;
import java.util.List;

public class lcr146 {
    class Solution {
        public int[] spiralArray(int[][] array) {
            if (array == null || array.length == 0)
            {
                return new int[0];
            }
            int a = 0;
            int b = 0;
            int c = array.length - 1;
            int d = array[0].length - 1;
            List<Integer> ans = new ArrayList<>();
            while (a <= c && b <= d)
            {
                handle(array, a, b, c, d, ans);
                a++;
                b++;
                c--;
                d--;
            }
            return ans.stream().mapToInt(Integer::intValue).toArray();
        }

        void handle(int[][] array, int a, int b, int c, int d, List<Integer> ans)
        {
            if (a == c)
            {
                for (int i = b; i <= d; i++)
                {
                    ans.add(array[a][i]);
                }
            }
            else if (b == d)
            {
                for (int i = a; i <= c; i++)
                {
                    ans.add(array[i][b]);
                }
            }
            else
            {
                for (int i = b; i < d; i++)
                {
                    ans.add(array[a][i]);
                }
                for (int i = a; i < c; i++)
                {
                    ans.add(array[i][d]);
                }
                for (int i = d; i > b; i--)
                {
                    ans.add(array[c][i]);
                }
                for (int i = c; i > a; i--)
                {
                    ans.add(array[i][b]);
                }
            }
        }
    }
}
